#include "electric_motor.hpp"
#include <cassert>
#include <iostream>
int main() { // 创建一个 ElectricMotorProperty 实例
    ElectricMotorProperty motorProperty(
        "ExampleMotor",                          // 名称
        ELECTRIC_MOTOR_TYPE::THREE_PHASED_ASYNC, // 类型
        100.0,                                   // 最大功率 kW
        200.0,                                   // 最大扭矩 N·m
        1000.0,                                  // 最大转速 rpm
        0.95,                                    // 效率
        2.5                                      // 减速比
    );

    std::cout << "Motor Name: " << motorProperty.getName() << std::endl;
    assert(FLOAT_CLOSE(motorProperty.getMaxRPM(), 1000.0));

    // 获取并打印电机的最大周速
    fp_type maxPerimeterSpeed =
        motorProperty.getMaxPerimeterSpeed(1); // 假设轮径为1米
    std::cout << "Max Perimeter Speed: " << maxPerimeterSpeed << " m/s"
              << std::endl;
    assert(FLOAT_CLOSE_EMINUS_3(maxPerimeterSpeed, 75.398223));

    // 获取并打印电机在轴上的最大牵引力
    fp_type torqueLimitOnAxle =
        motorProperty.getTorqueLimitOnAxle(2); // 假设轮径为2米，则半径为1米
    std::cout << "Torque Limit on Axle: " << torqueLimitOnAxle << " kN"
              << std::endl;
    assert(FLOAT_CLOSE_EMINUS_3(torqueLimitOnAxle, 0.5));

    // // 创建多个电机实例
    std::vector<ElectricMotor> motors =
        ElectricMotor::createMultipleMotors(4); // 创建4个电机

    // 使用电机实例
    for (auto &motor : motors) {
        // 假设这里有一些对电机实例的操作
        std::cout << "Motor ID: " << motor.getId()
                  << ", Status: " << motor.getStatus() << std::endl;
    }

    return 0;
}